iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
DevOps

在Local建立完整的開發環境筆記系列 第 27

Day 27:Golang 應用部署到 Kubernetes 與 GitLab CI

  • 分享至 

  • xImage
  •  

1. Kubernetes 部署文件 (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: golang-web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: golang-web-app
  template:
    metadata:
      labels:
        app: golang-web-app
    spec:
      containers:
      - name: golang-web-app
        image: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: golang-web-app-service
spec:
  selector:
    app: golang-web-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: NodePort

2. GitLab CI 配置 (.gitlab-ci.yml)

stages:
  - build
  - deploy

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""

build:
  stage: build
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy:
  stage: deploy
  image: 
    name: bitnami/kubectl:latest
    entrypoint: ['']
  script:
    - kubectl config set-cluster k8s --server="${K8S_SERVER}"
    - kubectl config set clusters.k8s.certificate-authority-data ${K8S_CERTIFICATE_AUTHORITY_DATA}
    - kubectl config set-credentials gitlab --token="${K8S_TOKEN}"
    - kubectl config set-context default --cluster=k8s --user=gitlab
    - kubectl config use-context default
    - sed -i "s|${CI_REGISTRY_IMAGE}|${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}|g" deployment.yaml
    - kubectl apply -f deployment.yaml

3. 部署步驟

  1. 確保您的 GitLab 項目中包含上述所有文件。

  2. 在 GitLab 項目的設置中配置以下環境變量:

    • CI_REGISTRY: GitLab 容器倉庫的 URL
    • CI_REGISTRY_USER: GitLab 倉庫的用戶名
    • CI_REGISTRY_PASSWORD: GitLab 倉庫的密碼
    • K8S_SERVER: Kubernetes API 服務器地址
    • K8S_CERTIFICATE_AUTHORITY_DATA: Kubernetes 集群的 CA 證書數據
    • K8S_TOKEN: 用於訪問 Kubernetes 集群的服務帳號令牌
  3. 將代碼推送到 GitLab 倉庫。GitLab CI 將自動執行構建和部署流程。

  4. 監控 GitLab CI/CD 流水線的執行情況。

  5. 部署完成後,可以使用以下命令驗證部署:

    kubectl get pods
    kubectl get services
    
  6. 要訪問應用,獲取 NodePort:

    kubectl get services golang-web-app-service
    

    然後使用任一集群節點的 IP 和分配的 NodePort 訪問應用。

注意事項

  • 確保 GitLab Runner 有權限訪問您的 Kubernetes 集群。
  • 根據您的具體環境和需求,可能需要調整 GitLab CI 配置和 Kubernetes 部署文件。
  • 對於生產環境,建議使用更安全的方式來管理敏感信息,如使用 Kubernetes Secrets 或 GitLab 的加密變量功能。

如果在部署過程中遇到任何問題,請檢查 GitLab CI/CD 日誌以獲取詳細信息,並確保所有必要的權限和配置都已正確設置。


上一篇
Day 26:Sample Code
下一篇
Day 28:Vault
系列文
在Local建立完整的開發環境筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言